// Copyright 2011, Vanya Davidenko.
// Кодировка файла: UTF-8. 
package info.iu9.interval_tree;
import java.util.Iterator;
import java.util.NoSuchElementException;



// Отрезок целых чисел.
public class IntInterval implements Cloneable,
                                    Iterable<Integer>,
                                    Comparable<IntInterval> {
  public Object clone() {
    try { return super.clone(); }
    catch(CloneNotSupportedException e) { assert false; return null; }
  }


  public Iterator<Integer> iterator() {
    return new Iterator<Integer>() {
      public void remove() { throw new UnsupportedOperationException(); }
      public boolean hasNext() { return current_ <= max_; }
      public Integer next() {
        if ( !hasNext() ) { throw new NoSuchElementException(); }
        return current_++;
      }

      private int current_ = min_;
    };
  }


  public int compareTo(final IntInterval r) {
    // Вычитать нельзя, возможно переполнение (пример: INT_MIN - INT_MAX)
    if ( min_ < r.min_ ) { return -1; }
    else if ( min_ > r.min_ ) { return 1; }
    return 0;
  }


  public String toString() {
    final StringBuilder sb = new StringBuilder();  // хватит на 2 long
    sb.append('(');
    sb.append(min_);
    sb.append(',');
    sb.append(max_);
    sb.append(')');
    return sb.toString();
  }


  public IntInterval(final int min,
                     final int max) throws IllegalArgumentException {
    if ( min > max ) { throw new IllegalArgumentException("min > max"); }
    min_ = min;
    max_ = max;
  }

  public int min() { return min_; }
  public int max() { return max_; }


  private final int min_;
  private final int max_;
}
